/*
 * @Author: ipk518 18163976442@163.com
 * @Date: 2023-02-16 16:29:31
 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @LastEditTime: 2024-03-07 15:11:22
 * @FilePath: /etws-sxk/inc/etws_i2c.h
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
#ifndef __ETWS_I2C_H
#define __ETWS_I2C_H

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <linux/i2c.h>
#include <linux/i2c-dev.h>

#define I2C_CACHE_SIZE 1024

/**
 * \brief I2C读数据
 *
 * \param[in] fd：I2C设备文件描述符
 * \param[in] dev_addr：I2C设备地址
 * \param[in] reg_addr：寄存器地址
 * \param[in] data：指向希望写入的数据地址
 * \param[in] len：希望写入的字节个数
 *
 * \retval 成功返回0，失败返回-1
 */
extern int i2c_init(const char* dev_path);

/**
 * \brief I2C读数据
 *
 * \param[in] fd：I2C设备文件描述符
 * \param[in] dev_addr：I2C设备地址
 * \param[in] reg_addr：寄存器地址
 * \param[in] data：指向希望写入的数据地址
 * \param[in] len：希望写入的字节个数
 *
 * \retval 成功返回0，失败返回-1
 *
 * \note 该函数适用于8位从机地址，且寄存器地址只有1个字节的情况
 */
extern int i2c_write(int fd, unsigned short dev_addr, unsigned char reg_addr, unsigned char* data, unsigned int len);

/**
 * \brief I2C读数据
 *
 * \param[in] fd：I2C设备文件描述符
 * \param[in] dev_addr：I2C设备地址
 * \param[in] reg_addr：寄存器地址
 * \param[out] data：存放读取到的数据
 * \param[in] len：希望读取的字节个数
 *
 * \retval 成功返回0，失败返回-1
 *
 * \note 该函数适用于8位从机地址，且寄存器地址只有1个字节的情况
 */
extern int i2c_read(int fd, unsigned short dev_addr,  unsigned char reg_addr, unsigned char* data, unsigned int len);

#endif